package Pages;

import java.io.IOException;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

import Const.GConfig;
import Const.IDSound;
import Const.IDTouch;
import Core.GLives;
import Core.KEY;
import Core.MRecord;
import Core.Slide;
import Core.Touch;

public class MainMenu extends Slide {
	
	private String sMenu[] = {"m_choitiep", "m_choi", "m_amthanh", "m_diemcao", "m_gamekhac", "m_gioithieu", "m_thoat"};
	private final String sMenu1[] = {"m_choitiep", "m_choi", "m_amthanh", "m_diemcao", "m_gioithieu", "m_thoat"};
	private Image imgbg, imgfocus, imgloa;
	private Image imgmenu[] = new Image[sMenu.length];
	Image imgback = null;
	public static boolean hasGamekhac = false;
	
	private static int Index = 0;
	private int ITEM_HEIGHT = 40;
	private int numberOfItem = 0;
	private int iTopPaint = 130;
	private int iStartItem = 0;
	private int trans = 0, huong = 0;
	
	final short MAIN = 0;
	final short HIGHSCORE = 1;
	final short INTRO = 2;
	private short sub = MAIN;
	
	// HighScore
	private int arrTopScore[] = new int[GConfig.maxHightScore];
	private String arrTopScoreN[] = new String[GConfig.maxHightScore];
	int numOfRow = 7;
	
	//Intro
	int curT;
	private boolean isPause = false;
	private String st[][]={{"ĐI TÌM KHO BÁU","Phiên bản "+GLives.ins.version }
										,{"Giới thiệu chung","Một người đi tìm kho báu. Nhưng trong hang tối mà người đó không có đèn. Nhiệm vụ của người chơi là giúp người đó đi đến nơi có kho báu và ra khỏi hang an toàn."}
										,{"Cách chơi","Trước mỗi level người chơi có thể xem toàn bộ đường đi trong hang. Sau khi bắt đầu đi thì hang từ từ tối xuống.\nMỗi lần đụng trúng bất cứ vật gì trong hang người chơi bị trừ 1 mạng."}
										,{"Jamo Studio","Được thành lập từ năm 2010 từ một bộ phận của Công ty Cổ phần Công nghệ và Truyền thông Biển Xanh, Jamo Studio ra đời với mục tiêu cung cấp những sản phẩm game và ứng dụng trên điện thoại di động, game trên nền Flash, wap phục vụ nhu cầu giải trí của người Việt. Với đội ngũ không ngừng phát triển về chất lượng cũng như số lượng, Jamo Studio chọn cho mình hướng đi riêng trước việc ngày càng nhiều đơn vị nhảy vào thị trường game, đó là xây dựng game gắn với truyền thống văn hóa, lịch sử, xã hội của người Việt. Cho đến nay, Jamo Studio đã vươn lên thành một trong những nhà cung cấp game và ứng dụng hàng đầu cho các Công ty viễn thông tại Việt Nam như Viettel, MobiFone...."}
										,{"Kịch bản", "Lê Thiên Phúc"}
										,{"Lập trình","Văn Tấn Tài\nTrần Hữu Xuân"}
										,{"Tester", "Nhật Thanh\nHoài Trân"}
										,{"Đồ họa","Phạm Tuấn Hải\nLê Hoàng Hải\nĐỗ Đức Long"}
										,{"Bản quyền","Bluesea Media, JSC."}
										};
	private String sPart[][] = null;
	
	public void init(){
		try {
			System.out.println("MainMenu Init");
			imgbg = Image.createImage("/menu.png");
			imgfocus = Image.createImage("/focusmenu.png");
			imgloa = Image.createImage("/loa.png");
			imgback = Image.createImage("/bt_back.png");
			if(!hasGamekhac)
				sMenu = sMenu1;
			if(!hasChoiTiep())
				iStartItem = 1;
			numberOfItem = sMenu.length - iStartItem;
			onResize();
			
			for(int i = 0; i < sMenu.length; i++)
				imgmenu[i] = Image.createImage("/" + sMenu[i]+".png");
			
			sound.playBackground(IDSound.BKG_MAIN, -1);
			
		} catch (IOException e) {
		}
	}
	
	void initHS(){
		for(int i = 0; i < arrTopScore.length; i++){
			arrTopScoreN[i] = "";
			arrTopScore[i] = 0;
		}
		MRecord r = GLives.ins.record;
		if(r.openRecStore(false)){
			r.seek(1, MRecord.k_P_START);
			for(int i = 0; i < arrTopScore.length; i++){
				arrTopScoreN[i] = r.readString();
				arrTopScore[i] = r.readInt();
				if(arrTopScore[i] == -1) arrTopScore[i] = 0;
			}
		}
		onResize();
	}
	
	void initIntro(){
		curT = inY + 70;
		isPause = false;
		onResize();
	}
	
	public void Click(int ID, int x, int y){
		if(ID == IDTouch.HOME)
			onkeyDown(KEY.BACK);
		else if(ID == Touch.NOTHING && sub == INTRO)
			isPause = !isPause;
	}
	
	public void registerTouch(){
		Touch.addTouchArea(IDTouch.HOME, inX + inW - 50, inY + inH - 50, 50, 50);
	}
	
	private boolean hasChoiTiep(){
		MRecord r = GLives.ins.record;
		if(r.openRecStore(false)){
			boolean b = r.readBoolean();
			if(r.getError() == r.k_ERROR_OUT_OF_BOUND){
				System.out.println("RecordErr: Game moi chay lan dau!");
				return false;
			}
			System.out.println("Game is finish: "+b);
			return b==false;
		}
		System.out.println("-Game moi chay lan dau!");
		return false;
	}
	
	public void destroy(){
		imgbg = null;
		for(int i = 0; i < imgmenu.length; i++)
			imgmenu[i] = null;
		imgmenu = null;
		imgbg = null;
		imgfocus = null;
		imgloa = null;
		imgback = null;
		//highScore
		arrTopScore = null;
		//intro
		if(sPart != null)
		for(int i = 0; i < sPart.length; i++)
			sPart[i] = null;
	}

	public void onResize() {
		// menu
		if(GLives.ScreenHeight <= 240) ITEM_HEIGHT = 30;
		iTopPaint = GLives.ScreenHeight  - inY - numberOfItem*ITEM_HEIGHT - 10;
		//highScore
		if(sub == HIGHSCORE){
			numOfRow = (inH - 50) / 30;
			if(numOfRow > GConfig.maxHightScore) numOfRow = GConfig.maxHightScore;
		}
		//Intro
		if(sub == INTRO){
			sPart = new String[st.length][];
			for(int i = 0; i < sPart.length; i++)
				sPart[i] = GLives.ins.bmf_normal.splitStrInLine(st[i][1], inW - 40);
		}
	}
	
	public void touchDown(int ID, int x, int y) {
		if(sub == MAIN) {
			if(x < inX + 24 || x > inX + 150 || y < iTopPaint || y > iTopPaint + numberOfItem*ITEM_HEIGHT)
				return;
			int inew = (y-iTopPaint)/(ITEM_HEIGHT);
			if(inew == Index)
				onkeyDown(KEY.FIRE);
			else if(inew < numberOfItem)
				Index = inew;
		}
	}
	
	public void paint(Graphics g){
		g.setColor(0x0);
		g.fillRect(0, 0, GLives.ScreenWidth, GLives.ScreenHeight);
		
		g.setClip(inX, inY, inW, inH);
		
		g.drawImage(imgbg, trans + inX, GLives.ScreenHeight>>1, Graphics.LEFT|Graphics.VCENTER);
		
		//menu
		if(huong != 0 || sub == MAIN){
			for(int i = 0; i < numberOfItem; i++)
				g.drawImage(imgmenu[i+ iStartItem], trans + inX + 35, iTopPaint + i*ITEM_HEIGHT + (ITEM_HEIGHT>>1), Graphics.VCENTER|Graphics.LEFT);
			if(sound.isEnable()) g.drawImage(imgloa, trans + inX + 35 + imgmenu[1 + (1-iStartItem) + iStartItem].getWidth() + 5, iTopPaint + (1 + (1-iStartItem))*ITEM_HEIGHT + (ITEM_HEIGHT>>1), Graphics.VCENTER|Graphics.LEFT);
			g.drawImage(imgfocus, trans + inX + (Index == 1 + (1-iStartItem) && sound.isEnable() ? 4 : 35 + imgmenu[Index+ iStartItem].getWidth() + 10), iTopPaint + Index*ITEM_HEIGHT + (ITEM_HEIGHT>>1) - 5, Graphics.VCENTER|Graphics.LEFT);
		}
		
		//back
		if(huong == 0 && (sub == HIGHSCORE || sub == INTRO))
			g.drawImage(imgback, inX + inW - 5, inY + inH - 5, Graphics.RIGHT | Graphics.BOTTOM);
		
		//highscore
		if(sub == HIGHSCORE)
		for(int i = 0; i < numOfRow; i++){
			if(arrTopScore[i] > 0){
				//Static.drawNumber(g, i+1, trans + 200 + inX + 60, inY + 50 + i*30, Graphics.RIGHT|Graphics.TOP, false);
				drawStringBold(g, arrTopScoreN[i], trans + 200 + inX + 20 , inY + 50 + i*30, 0, 0x5f3232);
				Static.drawNumber(g, arrTopScore[i], trans + 200 + inX + inW - 40, inY + 50 + i*30, Graphics.RIGHT|Graphics.TOP, false);
			}
		}
		
		//Intro
		if(sub == INTRO){
			int curY = curT;
			for(int i=0;i<st.length;i++){
				if(curY > inY + 30 && curY < inY + inH - 50) drawStringBold(g, st[i][0], trans + 197 + inX + (inW >> 1), curY, 2, 0xCC1155);
				curY += GLives.ins.bmf_bold.getHeight()+10;
				
				for(int j = 0; j < sPart[i].length; j++){
					if(curY > inY + 30 && curY < inY + inH - 50) drawString(g, sPart[i][j], trans + 197 + inX + (inW >> 1), curY, 2, 0xFFFFFF);
					curY += GLives.ins.bmf_normal.getHeight();
				}
				curY += GLives.ins.bmf_normal.getHeight();
			}
			if(!isPause){
				if(curY < inY + 20) curT = inY + inH - 20;
				else curT -= 1;
			}
		}
	}
	
	public void update() {
		if(huong == 1){
			if(trans > inW - imgbg.getWidth()) trans-= (Math.abs(inW - imgbg.getWidth()) + trans + 4)>>2;
			else {
				if(Index == 2 + (1-iStartItem)){
					sub = HIGHSCORE;
					initHS();
				}
				else if(Index == 4 + (1-iStartItem) + (hasGamekhac ? 0 : -1)){
					sub = INTRO;
					initIntro();
				}
				huong = 0;
			}
		} else if(huong == 2){
			if(trans < 0) trans+= (-trans + 4)>>2;
			else { huong = 0; sub = MAIN;}
		}
	}
	
	public void onkeyDown(int keyCode) {
		if(sub==MAIN)
			switch(keyCode){
			case KEY.DOWN:
				if(Index < numberOfItem-1)
					Index++;
				else
					Index=0;
				break;
			case KEY.UP:
				if(Index > 0)
					Index--;
				else
					Index = numberOfItem-1;
				break;
			case KEY.FIRE:
				if(Index >= 0)
					doAction();
				break;
			}
		else
			switch(keyCode){
			case KEY.BACK:
			case KEY.RIGHT_SOFTKEY:
				huong = 2;
				break;
			case KEY.FIRE:
				if(sub == INTRO) isPause = !isPause;
			}
	}

	private void doAction(){
		if(Index == 0 && iStartItem == 0){ // co choi tiep
			System.out.println("Continue");
			changeState(State.BODY_CONTINUE);
		} else if(Index == 0 + (1-iStartItem)){
			System.out.println("New");
			changeState(State.BODY_NEW);
		} else if(Index == 1 + (1-iStartItem)){
			// ("Option");
			sound.ONOFF_Switch(true);
//			if(sound.isEnable()){
//				System.out.println("ON");
//			} else{
//				System.out.println("OFF");
//			}
		} else if(Index == 2 + (1-iStartItem)){
			huong = 1;
			//changeState(State.HIGHSCORE);
		} else if(Index == 3 + (1-iStartItem) && hasGamekhac){
			sound.stopAll();
			changeState(State.IGP);
		} else if(Index == 4 + (1-iStartItem) + (hasGamekhac ? 0 : -1)){
			//changeState(State.HELP);
			huong = 1;
		} else if(Index == 5 + (1-iStartItem) + (hasGamekhac ? 0 : -1)){
			exit();
		}
			
	}
}
